go学习(四)新建go的Web项目 您所在的位置:网站首页 go mod init test go学习(四)新建go的Web项目

go学习(四)新建go的Web项目

#go学习(四)新建go的Web项目| 来源: 网络整理| 查看: 265

一、vscode搭建Go环境 1、安装go环境

官网或golang中文网 ,下载xx.windows-amd64.msi cmd查看版本:go version 我用的是golang 1.16.5,golang 1.18版本添加了泛型。

2、使用 Go Module 2.1 go module简介

(1)不再需要GOROOT和GOPATH

使用Go Module进行包管理,就不再需要GOROOT和GOPATH了!

Go开发相关的环境变量(GOROOT和GOPATH)如下 GOROOT:GOROOT就是Go的安装目录,(类似于java的JDK)。不用往环境变量配置。包管理方式变成Go Module之后就用处不大了。 如,GOROOT = C:\Program Files\Go GOPATH:GOPATH是我们的工作空间,保存go项目代码和第三方依赖包。安装后,在环境变量中有。 如,GOPATH = %USERPROFILE%\go 参考:https://blog.csdn.net/qq_38151401/article/details/105729884

(2)使用 go module 管理依赖后会在项目根目录下生成两个文件 go.mod 和 go.sum。go.mod 中会记录当前项目的所依赖的包的信息。

(3)在需要使用时才开启GO111MODULE = on,平时GO111MODULE = off,避免在已有项目中意外引入 go module。

(4)go module 的目的是依赖管理,所以使用 go module 时你可以舍弃 go get 命令(但是不是禁止使用, 如果要指定包的版本或更新包可使用go get,平时没有必要使用)

2.2 go module 配置步骤(win)

(1)设置GO111MODULE环境变量

set GO111MODULE=on 或者 go env -w GO111MODULE=on go env // 查看 GO111MODULE 选项为 on 代表修改成功

1 要使用go module 首先要设置GO111MODULE=on,GO111MODULE 有三个值,off、on、auto。auto 会根据当前目录下是否有 go.mod 文件来判断是否使用 modules 功能。 2 平时 GO111MODULE = off,在需要使用的时候再开启,避免在已有项目中意外引入 go module。

(2)配置代理

1 无论使用哪种模式,module 功能默认不在 GOPATH 目录下查找依赖文件,所以使用 modules 功能时请设置好代理。 2 默认是Google访问不到,需要设置代理才能用。【?】

Go version >= 1.13 时,直接使用go env -w命令就行了。【如果执行不了,重启一下vs或终端】

//方法1:命令配置 go env -w GOPROXY=https://goproxy.cn,direct //方法2:菜单配置 Preferences>Go>Go Modules>Environment GOPROXY=https://goproxy.cn,direct

其他版本:https://www.cnblogs.com/fanbi/p/13649929.html?ivk_sa=1024320u

2.2 命令 go mod init test // 初始化。先进入test项目下,然后执行此命令,项目根目录会出现一个 go.mod 文件 go mod tidy // 检测依赖。tidy会检测该文件夹目录下所有引入的依赖,写入 go.mod 文件,写入后你会发现 go.mod 文件有所变动 go mod download //下载依赖。我们需要将依赖下载至本地,而不是使用 go get go mod vendor //导入依赖。此命令会将刚才下载至 GOPATH 下的依赖转移至该项目根目录下的 vendor(自动新建) 文件夹下, 此时我们就可以使用这些依赖了 //依赖更新:这里的更新不是指版本的更新,而是指引入新依赖,依赖更新请从检测依赖部分一直执行即可: go mod tidy go mod download go mod vendor

参考: https://www.cnblogs.com/niuben/p/12560104.html

3、安装vscode

迅雷去vscode官网下载。我用的是System Installer64 bit 解决vscode下载慢的问题:把/stable前的内容换成【vscode.cdn.azure.cn】,就变成了国内镜像了,超快!

4、安装插件

vscode-Extensions,搜索go安装。

View-Command Palette...-Go:Install/Update Tools,全选安装即可。

5、版本管理工具

gvm是第三方开发的Go多版本管理工具,这是目前在这方面做得最好的工具。

二、vscode新建Go项目 1、步骤

新建文件夹demo1,作为项目根目录

cmd,执行命令:go mod init demo1

vscode打开文件:File-Open Folder,选择项目根目录demo1

新建main.go文件:File-New File,在根目录下创建main.go文件

package main // 可执行文件,package必须是main import ( "demo1/test" ) func main(){ test.F1() }

创建test包和F1函数:创建文件夹demo1/test,创建文件test1.go,内容如下。

package test // 可以不与文件夹同名,但最好同名 import ( "fmt" ) func F1(){ // 大写开头表示公有,小写开头表示私有 fmt.Println("Hello World!") }

执行:Terminal-New Terminal,执行命令go run main.go

三、包管理:Go Module 1、Go的包管理发展

GOPATH ==> Go Vendor ==> Go Module

2、mod命令 // 常用命令 go mod init // 初始化 go.mod,将开启 mod 使用 go mod tidy // 添加或者删除 modules,取决于依赖的引用 go mod vendor // 复制依赖到 vendor 目录下 // 其它命令 go mod download // 下载 module 到本地 go mod edit // 编辑 go.mod go mod graph // 打印 modules 依赖图 go mod verify // 验证依赖 go mod why // 解释依赖使用

使用案例:

// golang 建立新项目时,要注意在终端上使用以下命令建立go.mod文件。否则 go get,以及引用自己项目包文件时会出错。 go mod init projectName 3、import用法

golang 使用包 package 来管理定义模块,可以使用 import 关键字来导入使用。

(1)Go Module的import:

导入go自带的包/go get安装的包:import "包名",Go Module会自动找到相应的包。 若是go get的包,会自动复制到vendor文件夹内,然后自动去vendor底下找。 导入自定义包:import "项目名/pacakge名"

相对路径 import "./model" //当前文件同一目录的model目录,但是不建议这种方式import 绝对路径 import "shorturl/model" //加载GOPATH/src/shorturl/model模块

参考:https://blog.csdn.net/zhangzhebjut/article/details/25564457

(2)历史版本的import: 如果导入的是 go 自带的包,则会去安装目录 $GOROOT/src 按包路径加载,如 fmt 包 如果是我们 go get 安装或自定义的包,则会去 $GOPATH/src 下加载 4、package用法

package是最基本的分发单位和工程管理中依赖关系的体现;

每个GO语言源代码文件开头都拥有一个package声明,表示源码文件所属代码包; // golang包名必须与所在文件夹同名吗? 不必须,但是同个目录中(不含子目录)的所有文件包名必须一致,通常为了方便包定位,建议包名和目录名一致,否则你import"A",使用起来B.xxx,看上去不统一,不能一眼看出来这个B包是哪个文件的。 要生成GO语言可执行程序,必须要有main的package包,且必须包含main()函数; 同一个路径下只能存在一个package,一个package可以拆成多个源文件组成;(同一个目录下文件只能有一个包名,一个目录下可以有多个文件)

参考:https://blog.csdn.net/qq_37189082/article/details/100041835

四、Gin框架 1、Gin介绍 (1)资源

Gin是一个用Go语言编写的web框,Go最流行的Web框架。使用了httprouter,高性能和高效。

官方中文文档:https://gin-gonic.com/zh-cn/docs/introduction/ GitHub地址:https://github.com/gin-gonic/gin 获取参数的案例:https://www.cnblogs.com/jiujuan/p/9388507.html【比官方简单清晰,用到再说】 主要参考:https://www.cnblogs.com/linqiaobao/p/14206494.html【下面整理参考,未完待续】

(2)RESTful API

Gin框架支持开发RESTful API的开发。 参考:http://www.ruanyifeng.com/blog/2011/09/restful.html RESTful架构,就是目前最流行的一种互联网软件架构。如果一个架构符合REST原则,就称它为RESTful架构。 Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer,表现层状态转化 对每个词理解:资源(主语Resourse)的表现层(Representational)状态转化(State Transfer)。

(2-1)Resource

资源是网络上的一个实体,可以是图片、文本、歌曲、服务……。访问资源用的是,资源位置的唯一标识URI。

(2-2)Representation

表现,即表示格式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。 如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。

它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

Accept : 客户端希望接受的数据类型,比如 Accept:text/xml(application/json)表示希望接受到的是xml(json)类型 Content-Type:发送端发送的实体数据的数据类型。 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成。 <request-line> //请求行 <headers> //首部行 <blank line> //空行 <request-body> //请求体 HTTP相关,更多参考:https://www.cnblogs.com/myseries/p/11239662.html

http协议(三)几种数据传输方式

(2-3)State Transfer 状态:访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。 HTTP协议,是一个无状态协议。只管请求+响应,一锤子买卖。这意味着,所有状态都保存在服务器端。 随着web的不断发展,有时候,需要将这种状态进行保持,随即,就引入了cookie技术,cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。 客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。 (2-4)总结

REST三原则:

每一个URI代表一种资源; 客户端和服务器之间,传递这种资源的某种表现层; 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

简单来说,REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作。

GET用来获取资源 POST用来新建资源 PUT用来更新资源 DELETE用来删除资源。

例子 例如,我们现在要编写一个管理书籍的系统,我们可以查询对一本书进行查询、创建、更新和删除等操作,我们在编写程序的时候就要设计客户端浏览器与我们Web服务端交互的方式和路径。按照经验我们通常会设计成如下模式:【URL不同,请求方式不限。】

请求方法 URL 含义 GET /book 查询书籍信息 POST /create_book 创建书籍记录 POST /update_book 更新书籍信息 POST /delete_book 删除书籍信息

同样的需求我们按照RESTful API设计如下:【URL相同,请求方法不同!】

请求方法 URL 含义 GET /book 查询书籍信息,对应数据库的Read POST /book 创建书籍记录,对应数据库的Update PUT /book 更新书籍信息,对应数据库的Create DELETE /book 删除书籍信息,对应数据库的Delete 2、Gin安装和使用 (1)Gin安装

由于配置了mod,只需引入包即可,然后执行vendor命令。如果报红参考这里

// 引入gin包 import "github.com/gin-gonic/gin" // 报红执行命令 go mod init 项目名 go mod vendor go mod tidy (2)第一个Gin案例 package main import ( "github.com/gin-gonic/gin" ) func main() { // 创建一个默认的路由引擎 r := gin.Default() // GET:请求方式;/hello:请求的路径 // 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数 r.GET("/hello", func(c *gin.Context) { // c.JSON:返回JSON格式的数据 c.JSON(200, gin.H{ "message": "Hello world!", }) }) // 启动HTTP服务,默认在0.0.0.0:8080启动服务 r.Run() }

浏览器打开127.0.0.1:8080/hello

3、Gin连接mysql

参考:https://www.cnblogs.com/finnlee/p/14269591.html

import ( "database/sql" "fmt" "log" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" )

如果报红找不到导入包,则可以多执行几次go mod vendor和go mod tidy,还是不行,关掉项目重新打开试试。 注意,文件不要以*_test.go结尾,无法编译运行。

4、Gin渲染 五、Postman进行测试

开发RESTful API的时候我们通常使用Postman来作为客户端的测试工具。

1、安装

下载:postman官网

不想注册:关掉重启就行,或者File-New Postman Window

2、使用

教程:https://blog.csdn.net/fxbin123/article/details/80428216

新建请求:File-New Tab,按教程设置参数。

请求中用到(IP时?)localhost或127.0.0.1

存储请求:一个项目一个Collections,下面还可以按照文件夹分类,保存请求。创建Collections。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有